﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Comun;

namespace DalcProFacu
{
    public class Sistema
    {
        Conexion conn = null;
        Errores errores = null;

        public Sistema(Conexion con)
        {
            conn = con;
            errores = new Errores();
        }

        public DataSet TablaDeTabla(string sCampo1, string sNombreTabla)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT TBCODE CODIGO, TBDESCR DESCRIPCION FROM SAHC_TABLAMADRE ");
            sSql.Append(string.Format(" WHERE TBNUME = '{0}' ", sCampo1));

            Ds = conn.EjecutarQuery(sSql.ToString(), sNombreTabla.ToString());
            //this.Errores = conn.Errores;
            return Ds;
        }

        public DataSet GetObraSocial()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT IDOBRASOCIAL CODIGO, DESCRIPCION FROM SAHC_OBRASOCIAL ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "OBRASOCIAL");

            //this.Errores = conn.Errores;
            return Ds;
        }

        public int GetNuevoHC()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();
            int valor = 0;

            sSql.Append(" SELECT TOP 1 IDHISTORIACLINICA FROM SAHC_HISTORIACLINICA ");
            sSql.Append(" ORDER BY IDHISTORIACLINICA DESC ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "HISTORIAL");

            //this.Errores = conn.Errores;
            if (Ds.Tables["HISTORIAL"].Rows.Count > 0)
            {
                foreach (DataRow dr in Ds.Tables["HISTORIAL"].Rows)
                {
                    valor = (int)dr["IDHISTORIACLINICA"];
                }
            }

            return valor;
        }

        public int GetIdPaciente(string sHC)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();
            int valor = 0;

            sSql.Append(" SELECT TOP 1 IDPACIENTE FROM SAHC_HISTORIACLINICA ");
            sSql.Append(string.Format(" WHERE IDHISTORIACLINICA = {0} ORDER BY IDPACIENTE DESC ",sHC));

            Ds = conn.EjecutarQuery(sSql.ToString(), "NUMPACIENTE");

            //this.Errores = conn.Errores;
            if (Ds.Tables["NUMPACIENTE"].Rows.Count > 0)
            {
                foreach (DataRow dr in Ds.Tables["NUMPACIENTE"].Rows)
                {
                    valor = (int)dr["IDPACIENTE"];
                }
            }

            return valor;
        }

        public int GetNuevoPac()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();
            int valor = 0;

            sSql.Append(" SELECT TOP 1 IDPACIENTE FROM SAHC_PACIENTE ");
            sSql.Append(" ORDER BY IDPACIENTE DESC ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "NUMPACIENTE");

            //this.Errores = conn.Errores;
            if (Ds.Tables["NUMPACIENTE"].Rows.Count > 0)
            {
                foreach (DataRow dr in Ds.Tables["NUMPACIENTE"].Rows)
                {
                    valor = (int)dr["IDPACIENTE"];
                }
            }

            return valor;
        }

        public DataSet GetEspecialidad()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT IDESPECIALIDAD CODIGO,DESCRIPCION FROM SAHC_ESPECIALIDAD ");
            Ds = conn.EjecutarQuery(sSql.ToString(), "ESPECIALIDADES");

            //this.Errores = conn.Errores;

            return Ds;
        }

        public string GetEspecialidad(string sEspecialidad)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            string Especialidad;

            sSql.Append(" SELECT * FROM SAHC_ESPECIALIDAD ");
            sSql.Append(string.Format(" WHERE IDESPECIALIDAD = {0}", sEspecialidad));
            Ds = conn.EjecutarQuery(sSql.ToString(), "ESPECIALIDAD");

            //this.Errores = conn.Errores;
            Especialidad = Ds.Tables["ESPECIALIDAD"].Rows[0]["DESCRIPCION"].ToString();

            return Especialidad;
        }

        public DataSet GetProfesionales(string sEspecialidad)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT PR.IDPROFESIONAL CODIGO,P.APELLIDO DESCRIPCION ");
            sSql.Append(" FROM SAHC_PROFESIONAL PR ");
            sSql.Append(" INNER JOIN SAHC_PERSONAL P ON P.IDPERSONA = PR.IDPERSONAL ");
            sSql.Append(" INNER JOIN SAHC_ESPECIALIDAD E ON E.IDESPECIALIDAD = PR.IDESPECIALIDAD ");
            sSql.Append(string.Format(" WHERE E.IDESPECIALIDAD = {0} ", sEspecialidad));
            
            Ds = conn.EjecutarQuery(sSql.ToString(), "PROFESIONAL");

            //this.Errores = conn.Errores;

            return Ds;
        }


        public DataSet ProfesionalLogeado(string sIdUsu)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT PR.IDPROFESIONAL, PR.IDESPECIALIDAD FROM SAHC_PROFESIONAL PR ");
            sSql.Append(" INNER JOIN SAHC_PERSONAL P ON P.IDPERSONA = PR.IDPERSONAL ");
            sSql.Append(" INNER JOIN SAHC_USUARIO U ON U.IDUSUARIO = P.IDPERSONA ");
            sSql.Append(string.Format(" WHERE U.IDUSUARIO = {0} ", sIdUsu));
            Ds = conn.EjecutarQuery(sSql.ToString(), "PROFLOGEADO");

            //this.Errores = conn.Errores;

            return Ds;
        }

        public string GetProfesional(string sProfesiona)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            string profesional;

            sSql.Append(" SELECT P.APELLIDO + ' ' + P.NOMBRE FROM SAHC_PERSONAL P ");
            sSql.Append(" INNER JOIN SAHC_PROFESIONAL PR ON PR.IDPERSONAL = P.IDPERSONA ");
            sSql.Append(string.Format(" WHERE PR.IDPROFESIONAL = {0} ", sProfesiona));
            Ds = conn.EjecutarQuery(sSql.ToString(), "PROFESIONAL");

            profesional = Ds.Tables["PROFESIONAL"].Rows[0][0].ToString();

            //this.Errores = conn.Errores;

            return profesional;
        }

        public DataSet LoginUsuario(string sUsu, string sPass)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT * FROM SAHC_USUARIO ");
            sSql.Append(string.Format(" WHERE NOMUSU = '{0}' AND CLAVE = '{1}' ", sUsu, sPass));
            Ds = conn.EjecutarQuery(sSql.ToString(), "LOGIN");

            this.errores = conn.Errores;

            return Ds;
        }

        public DataSet FuncionesHabilitadas(string sPerfil)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT * FROM SAHC_PERFILFUNCION ");
            sSql.Append(string.Format(" WHERE IDPERFIL = {0}  ", sPerfil));

            Ds = conn.EjecutarQuery(sSql.ToString(), "FUNCIONES");

            //this.Errores = conn.Errores;

            return Ds;
        }

        public int ObtenerClave()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();
            int valor = 0;

            sSql.Append(" SELECT MAX(IDESPECIALIDAD) + 1 ID FROM SAHC_ESPECIALIDAD ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "ESPECIALIDAD");

            //this.Errores = conn.Errores;

            valor = Convert.ToInt32(Ds.Tables["ESPECIALIDAD"].Rows[0][0].ToString());

            return valor;
        }

        public int AltaEspecialidad(int sNuevaId, string sNuevaDescripcion)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(" INSERT INTO SAHC_ESPECIALIDAD VALUES ( ");
            sSql.Append(string.Format(" {0},'{1}')", sNuevaId, sNuevaDescripcion));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public int ModificacionEspecialidad(int sId, string sDescripcion)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(string.Format(" UPDATE SAHC_ESPECIALIDAD SET descripcion = '{0}'", sDescripcion));
            sSql.Append(string.Format(" WHERE idEspecialidad = {0}", sId));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public int BajaEspecialidad(int sId)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(string.Format(" DELETE FROM SAHC_ESPECIALIDAD WHERE idespecialidad = {0}", sId));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public DataSet GetDatosEspecialidad(int sId)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT idEspecialidad, descripcion FROM SAHC_ESPECIALIDAD ");
            sSql.Append(string.Format(" WHERE  idEspecialidad = {0}  ", sId));

            Ds = conn.EjecutarQuery(sSql.ToString(), "ESPGRAL");

            //this.Errores = conn.Errores;

            return Ds;
        }

        public DataSet GetOSPrepagas()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT * FROM SAHC_OBRASOCIAL ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "OSPREPAGAS");

            //this.Errores = conn.Errores;

            return Ds;
        }

        public DataSet GetDatosOSPrepaga(int sIdOSPrepaga)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT * FROM SAHC_OBRASOCIAL ");
            sSql.Append(string.Format(" WHERE idObraSocial = {0} ", sIdOSPrepaga));

            Ds = conn.EjecutarQuery(sSql.ToString(), "OSPREPAGAS");

            //this.Errores = conn.Errores;

            return Ds;
        }

        public int ObtenerClaveOSP()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();
            int valor = 0;

            sSql.Append(" SELECT MAX(idObraSocial) + 1 ID FROM SAHC_OBRASOCIAL ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "OSPREPAGAS");

            //this.Errores = conn.Errores;

            valor = Convert.ToInt32(Ds.Tables["OSPREPAGAS"].Rows[0][0].ToString());

            return valor;
        }

        public int AltaOSPrepaga(string sId, string sDescripcion)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(" INSERT INTO SAHC_OBRASOCIAL VALUES ( ");
            sSql.Append(string.Format(" {0}, '{1}' ) ", sId, sDescripcion));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public int ModificacionOBPrepaga(string sId, string sDescripcion)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(string.Format(" UPDATE SAHC_OBRASOCIAL SET descripcion = '{0}' ", sDescripcion));
            sSql.Append(string.Format("  WHERE idObraSocial = {0} ", sId));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public int BajaOSPrepaga(string sId)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(string.Format(" DELETE FROM SAHC_OBRASOCIAL WHERE idObraSocial = {0} ", sId));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public DataSet ObtenerDatosProfesional(string sUsuario)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            //sSql.Append(" SELECT P.* , PR.* FROM SAHC_PROFESIONAL P, SAHC_PERSONAL PR ");
            //sSql.Append(string.Format(" WHERE P.idPersonal = PR.idPersona AND P.idProfesional = {0} ", sUsuario));

            sSql.Append(" SELECT P.* , PR.* , E.descripcion desc_esp, TM1.tbdescr tipdoc, TM2.tbdescr tiposexo, TM3.tbdescr tipoestcivil ");
            sSql.Append(" FROM SAHC_PROFESIONAL P, SAHC_PERSONAL PR, SAHC_ESPECIALIDAD E ");
            sSql.Append(" , SAHC_TABLAMADRE TM1, SAHC_TABLAMADRE TM2, SAHC_TABLAMADRE TM3 ");
            sSql.Append(" WHERE P.idPersonal = PR.idPersona "); 
            sSql.Append(" AND P.idespecialidad = E.idespecialidad ");
            sSql.Append(" AND TM1.tbnume = 1 AND TM1.tbcode = PR.tipodoc ");
            sSql.Append(" AND TM2.tbnume = 2 AND TM2.tbcode = PR.sexo ");
            sSql.Append(" AND TM3.tbnume = 3 AND TM3.tbcode = PR.estadocivil ");
            sSql.Append(string.Format(" AND P.idProfesional= {0} ", sUsuario)); 

            Ds = conn.EjecutarQuery(sSql.ToString(), "PROFESIONAL");

            //this.Errores = conn.Errores;

            return Ds;
        }
    }
}
